package com.bnz.page.service.impl;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.bnz.page.entity.TbGoods;
import com.bnz.page.entity.TbGoodsDesc;
import com.bnz.page.entity.TbItem;
import com.bnz.page.mapper.TbGoodsDescMapper;
import com.bnz.page.mapper.TbGoodsMapper;
import com.bnz.page.mapper.TbItemMapper;
import com.bnz.page.service.PageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.thymeleaf.context.Context;
import org.thymeleaf.spring5.SpringTemplateEngine;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


@Service
public class PageServiceImpl implements PageService {
    @Autowired
    private TbGoodsMapper goodsMapper;
    @Autowired
    private TbGoodsDescMapper goodsDescMapper;
    @Autowired
    private TbItemMapper itemMapper;
    @Autowired
    private SpringTemplateEngine templateEngine;
    // 1. 创建静态化页面
    @Override
    public void createPage(long id) throws IOException {
        // 1.1 定义thymeleaf的上下文对象
        Context context = new Context();
        // 1.2 定义关联的数据集合
        Map<String,Object> data = new HashMap<>();
        // 1.3 得到id对应的spu商品
        TbGoods goods = goodsMapper.selectById(id);
        // 1.4 将得到的数据放到data集合中
        data.put("goods",goods);
        // 1.5 得到id对应的spu商品描述表
        TbGoodsDesc goodsDesc = goodsDescMapper.selectById(id);
        // 1.6 将得到的数据放到data集合中
        data.put("goodsDesc",goodsDesc);
        // 1.7 将一些前端用得上，但是在数据库里面是以字符串形式存储的数据转换为对象
        // 1.7.1 得到照片
        String itemImages = goodsDesc.getItemImages();
        // 1.7.2 得到规格
        String specificationItems = goodsDesc.getSpecificationItems();
        // 1.7.3 得到自定义扩展属性
        String customAttributeItems = goodsDesc.getCustomAttributeItems();
        // 1.8 将这些字符串转换为对象传入到静态页面
        data.put("itemImages", JSON.parseArray(itemImages,Map.class));
        data.put("specificationItems", JSON.parseArray(specificationItems,Map.class));
        data.put("customAttributeItems", JSON.parseArray(customAttributeItems,Map.class));
        // 1.9 得到id对应的sku商品表
        List<TbItem> items = itemMapper.selectList(new QueryWrapper<TbItem>().eq("goods_id", id).orderByDesc("is_default"));
        // 1.10 将默认的数据导入data集合
        data.put("items",items);
        data.put("sku",items.get(0));

        // 1. 拿到数据，传入前端
        context.setVariables(data);
        // 1. 定义生成的静态页面位置
        Writer writer = new FileWriter("D:\\nginx\\nginx-1.23.4\\html\\" + id + ".html");
        // 1. 执行模板引擎，生成静态页面
        templateEngine.process("item",context,writer);
    }
}
